package com.xxxx.yeb.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xxxx.yeb.mapper.EmployeeMapper;
import com.xxxx.yeb.mapper.PositionMapper;
import com.xxxx.yeb.pojo.Position;
import com.xxxx.yeb.pojo.RespBean;
import com.xxxx.yeb.service.IPositionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author zhoubin
 * @since 2020-07-17
 */
@Service
public class PositionServiceImpl extends ServiceImpl<PositionMapper, Position> implements IPositionService {
    @Autowired
    private PositionMapper positionMapper;
    @Autowired
    private EmployeeMapper employeeMapper;

    /**
     * 查询所有职位
     *
     * @return
     */
    public List<Position> queryAllPosition() {
        return positionMapper.queryAllPosition();
    }

    /**
     * 根据职位名称添加职位
     * 1.判断非空
     * 2.判断添加的职位在数据库中是否已存在(所有已有职位 包含启用与未启用)
     * 存在:判断是否已启用(enable)
     * 已启用:报警已已启用
     * 未启用:将该职位启用
     * 3.判断是否添加成功
     *
     * @param name
     */
    public RespBean addPositionByName(String name) {
//        判断传入的参数是否为空
        if (name == null || name.trim().equals("")) {
            return RespBean.error("职位名称不能为空");
        }
        Position temp = positionMapper.queryPositionByName(name);

        if (temp != null && temp.getEnabled()) {
            return RespBean.error("该职位已存在,请确认!");
        }
        // 判断该职位是否已存在且被启用
        if (temp != null && !temp.getEnabled()) {
            int num1 = positionMapper.enablePositionByName(name);
            if (num1 != 1) {
                return RespBean.error("系统错误,职位添加失败");
            } else {
                return RespBean.success("职位添加成功");
            }
        }
//       执行添加操作判断是否添加成功
        Integer num = positionMapper.addPositionByName(name);
        if (num != 1) {
            return RespBean.error("系统错误,职位添加失败");
        } else {
            return RespBean.success("职位添加成功");
        }

    }

    /**
     * 根据职位名称编辑职位
     * 1.判断非空(虽然点击事件必然不为空)
     * 2.判断新职位是否已存在
     * 3.判断职位是否成功添加
     *
     * @param position
     * @return
     */
    public RespBean updatePositionByPosition(Position position) {
        if (position == null) {
            return RespBean.error("请选中要编辑的对象");
        }
        String name = position.getName();
        if (name == null || name.trim().equals("")) {
            return RespBean.error("职位名称不能为空");

        }
        Position positionTemp = positionMapper.queryPositionByName(position.getName());
        if (positionTemp != null && !positionTemp.getId().equals(position.getId())) {
//         如果重名的职位已被启用
            if (positionTemp.getEnabled()) {
                return RespBean.error("该职位已存在,请确认!");
            } else {
                /**
                 *如果重名的职位未被启用
                 * 1.重新启用该职位
                 * 2.禁用当前职位
                 */
                positionMapper.enablePositionByName(position.getName());
                positionMapper.deleteById(position.getId());
                return RespBean.success("该职位由禁用改为启用");
            }
        }
        Integer num = positionMapper.updatePositionByPosition(position);
        if (num < 1) {
            return RespBean.error("系统异常,职位修改失败!");
        }
        return RespBean.success("职位修改成功");
    }

    /**
     * 通过id删除职位
     * 1.判断非空(非必要)
     * 2.删除操作
     * @return
     */
    public RespBean deleteBatchIds(Integer[] ids) {
        if (ids.length == 0) {
            return RespBean.error("请选择要删除的内容");
        }
//        将关联职位的员工职位清空
        employeeMapper.deleteBatchByPosIds(ids);

        int num = positionMapper.deleteBatchByIds(ids);
        if (num < 1) {
            return RespBean.error("系统异常,职位删除失败!");
        }
        return RespBean.success("职位删除成功");
    }
}
